package com.cy.store.service;

import com.cy.store.entity.BaseEntity;
import com.cy.store.entity.Product;
import org.springframework.util.DigestUtils;

import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;

/**
 * @author Luo Sheng
 * @school YiBin university
 * @create 2022-12-05 23:11
 */
public class BaseService {
    /**
     * 用户信息不存在
     */
    protected final static String USER_NOTFOUND_MESSAGE = "用户数据不存在";

    /**
     * 更新时产生未知异常
     */
    protected final static String UPDATE_ERROR_MESSAGE = "更新时产生未知异常";

    /**
     * 插入时产生未知异常
     */
    protected final static String INSERT_ERROR_MESSAGE = "插入时产生未知异常";

    /**
     * 删除时产生未知异常
     */
    protected final static String DELETE_ERROR_MESSAGE = "删除时产生未知异常";

    /**
     * 用户密码错误
     */
    protected final static String PASSWORD_ERROR_MESSAGE = "用户密码错误";

    /**
     * 用户名被占用
     */
    protected final static String USERNAME_ERROR_MESSAGE = "用户名被占用";

    /**
     * 收货地址不存在
     */
    protected final static String ADDRESS_NOTFOUND_MESSAGE = "收货地址数据不存在";

    /**
    * AccessDenied
    */
    protected final static String ACCESS_DENIED_MESSAGE = "非法访问用户地址信息";

    /**
     * AddressCountLimit
     */
    protected final static String COUNT_ERROR_MESSAGE = "用户地址信息已达上限";

    /**
     * 商品信息不存在
     */
    protected final static String PRODUCT_NOTFOUND_MESSAGE = "商品信息不存在";

    /**
     * 购物车信息不存在
     */
    protected final static String CART_NOTFOUND_MESSAGE = "购物车信息不存在";

    /**
     * 商品数据越界
     */
    protected final static String BREAK_BOUNDS_MESSAGE = "商品数量越界";

    /**
     * 插入数据
     */
    protected final static Integer INSERT_DATA = 1;

    /**
     * 更新数据
     */
    protected final static Integer UPDATE_DATA = 0;

    /**
     * is_delete
     */
    protected final static Integer IS_DELETE = 1;

    /**
     * not_delete
     */
    protected final static Integer NOT_DELETE = 0;

    /**
     * 更新日志信息
     * @param
     * @param username
     * @return
     */
    protected void updateService(BaseEntity entity, String username, Integer insert){
        if (insert.equals(1)){
            entity.setCreatedUser(username);
            entity.setCreatedTime(new Date());
        }
        entity.setModifiedUser(username);
        entity.setModifiedTime(new Date());
    }

    /**
     * 判断传入对象是否为Null
     * @param object
     * @return
     */
    protected boolean isNull(Object object){
        if (object == null){
            return true;
        }
        return false;
    }

    /**
     * 定义一个md5算法的加密处理
     * @param password
     * @param salt
     * @return
     */
    protected  String getMD5Password(String password,String salt){
        for (int i = 0; i < 3; i++) {
            // md5加密方法
            password = DigestUtils.md5DigestAsHex((salt + password + salt).getBytes(StandardCharsets.UTF_8)).toUpperCase(Locale.ROOT);
        }
        // 返回加密之后的密码
        return password;
    }

    /**
     * 剔除不需要的属性
     * 提高性能
     * @param products
     * @return
     */
    protected  List<Product> getProducts(List<Product> products) {
        products.stream().map((item) -> {
            // 设置前端页面不需要的数据为Null，提高性能
            item.setPriority(null);
            item.setCreatedUser(null);
            item.setCreatedTime(null);
            item.setModifiedUser(null);
            item.setModifiedTime(null);
            return item;
        }).collect(Collectors.toList());

        return products;
    }
}
